package org.example.user;

/**
 * @Author: dupeng
 * @CreateTime: 2025-07-03  15:33
 * @Description: TODO
 */

import cn.dev33.satoken.annotation.SaCheckSafe;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 登录测试
 */
@RestController
@RequestMapping("/acc/")
public class LoginController {

    // 测试登录  ---- http://localhost:8081/acc/doLogin?name=zhang&pwd=123456
    @RequestMapping("doLogin")
    public SaResult doLogin(String name, String pwd) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if("zhang".equals(name) && "123456".equals(pwd)) {
            //登录参数设置，例如登录设备标识，记住我模式等等。
            SaLoginParameter loginParameter = SaLoginParameter.create()
                    .setDeviceId("PC")
                    .setIsLastingCookie(true)
                    ;
            StpUtil.login(10001, loginParameter);
            return SaResult.ok("登录成功");
        }
        return SaResult.error("登录失败");
    }

    // 查询登录状态  ---- http://localhost:8081/acc/isLogin
    @RequestMapping("isLogin")
    public SaResult isLogin() {
        return SaResult.ok("是否登录：" + StpUtil.isLogin());
    }

    // 查询 Token 信息  ---- http://localhost:8081/acc/tokenInfo
    @RequestMapping("tokenInfo")
    public SaResult tokenInfo() {
        return SaResult.data(StpUtil.getTokenInfo());
    }

    // 测试注销  ---- http://localhost:8081/acc/logout
    @RequestMapping("logout")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }

    // 检查二级认证是否有效  ---- http://localhost:8081/acc/check
    @SaCheckSafe(value = "二级认证过期")
    @RequestMapping("check")
    public SaResult check() {
        return SaResult.ok("是否二级校验" + StpUtil.isSafe());
    }


    // 账号封禁  ---- http://localhost:8081/acc/disable/123
    @RequestMapping("disable/{id}")
    public SaResult disable(@PathVariable String id) {
        //踢人下线
        StpUtil.kickout(id);

        //账号封禁
        StpUtil.disable(id, 30);

        return SaResult.ok();
    }

    // 检查账号是否封禁  ---- http://localhost:8081/acc/checkDisable/123
    @RequestMapping("checkDisable/{id}")
    public SaResult checkDisable(@PathVariable String id) {
        // 校验指定账号是否已被封禁，如果被封禁则抛出异常 `DisableServiceException`
        StpUtil.checkDisable(id);

        return SaResult.ok();
    }


}

